package com.shujia.scala

import java.util.Scanner

object Demo2Base {
  def main(args: Array[String]): Unit = {
    /**
     * 变量
     * 可变：var
     * 不可变（常量）: val
     * 尽量使用val
     *
     *
     * 类型推断
     * 变量类型会自动通过等号右边的值推断出来
     *
     */
    //自动推断类型
    val a = 100
    println(a.getClass)
    //手动增加类型
    val b: String = "scala"
    println(b.getClass)

    //可变的变量
    //可变：变量的引用可以再指向其它的变量
    var i: Int = 100
    println(i)
    i = 200
    println(i)

    println("=" * 100)

    /**
     * 2、字符串
     * scala中的字符串和java中的字符串是同一个，java中字符串有的方法在scala中都有
     *
     * scala和java兼容：java中的类在scala中可以使用，scala中的类在java中也可以使用
     * scala和java的语法不一样
     *
     */
    val str: String = "java,spark,hadoop"
    //split：通过一个分隔符切分字符串
    val array: Array[String] = str.split(",")
    //mkString:通过一个分隔符将一个序列拼接成一个字符串，和split相反
    println(array.mkString("|"))

    /**
     * 字符串拼接
     * 1、使用+, 性能较差，会占用而外的内存空间
     * 2、StringBuffer,StringBuilder
     * 3、scala中的方法(推荐)
     *
     */

    //1、使用+
    val str1: String = "java" + "," + "hadoop" + "," + "spark"
    println(str1)


    //2、StringBuilder
    val builder = new StringBuilder
    builder.append("java")
    builder.append(",")
    builder.append("hadoop")
    builder.append(",")
    builder.append("spark")
    println(builder.toString())

    //3、scala中的方法
    val s1 = "java"
    val i1 = 100
    val d1 = 3.14

    //底层也是StringBuilder，只是scala中的一种简写
    val str2: String = s"${s1}_${i1}_$d1"
    println(str2)

    println("=" * 100)
    /**
     *
     * 数组：
     *
     */
    val ints: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
    //通过下标获取元素
    println(ints(0))

    //通过下标修改数据
    ints(2) = 100

    //打印数组中的元素
    println(ints.mkString("|"))

    println("=" * 100)
    /**
     * 算术运算
     *
     */

    val i2 = 100
    val i3 = 3
    println(i2 + i3)
    println(i2 - i3)
    println(i2 * i3)
    println(i2 / i3)
    println(i2 % i3)

    println("=" * 100)
    /**
     * 流程控制
     *
     */

    //if else

    val scanner = new Scanner(System.in)
    val age: Int = scanner.nextInt()
    if (age >= 18) {
      println("成年")
    } else {
      println("未成年")
    }

    println("=" * 100)

    /**
     * 循环
     * 1、while循环
     * 2、for循环，在scala中没有fori
     */

    //while

    val arrar1: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8)

    var j = 0
    while (j < arrar1.length) {
      println(arrar1(j))
      j += 1
    }
    println("=" * 100)

    //for(增强for循环)
    for (a: Int <- arrar1) {
      println(a)
    }


  }

}
